package com.mazaiting.manager.convert;

import com.mazaiting.manager.domain.entity.SysMenu;
import com.mazaiting.manager.domain.form.MenuForm;
import com.mazaiting.manager.domain.vo.menu.MenuDetailVO;
import com.mazaiting.manager.domain.vo.menu.MenuVO;
import org.mapstruct.Mapper;
import org.mapstruct.MappingConstants;
import org.mapstruct.MappingTarget;
import org.mapstruct.ReportingPolicy;

/**
 * 菜单转换器
 *
 * @author mazaiting
 * @create_time 2022/9/22 23:55
 */
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface IMenuConverter {
    /**
     * 菜单实体转换为菜单视图
     * @param entity 菜单实体
     * @return 菜单视图
     */
    MenuVO entity2VO(SysMenu entity);

    /**
     * 菜单实体转菜单详情视图
     * @param sysMenu 菜单实体
     * @return 菜单详情视图
     */
    MenuDetailVO entity2DetailVO(SysMenu sysMenu);

    /**
     * 菜单表单数据转换为系统实体
     * @param menuForm 菜单表单数据
     * @return 菜单实体
     */
    SysMenu form2Entity(MenuForm menuForm);

    /**
     * 将菜单表单数据注入到菜单实体
     * @param menuForm 菜单表单数据
     * @param sysMenu 菜单实体
     */
    void form2Entity(MenuForm menuForm, @MappingTarget SysMenu sysMenu);
}
